package cn.itsource.ymcc.exception;


import cn.itsource.ymcc.result.JSONResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.validation.ConstraintViolationException;
import java.util.List;

@RestControllerAdvice //对所有添加了RequestMapping的类做增强
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public JSONResult error(Exception e){
        e.printStackTrace();
        // return JSONResult.error("系统异常，请联系管理员",500);
        // 使用枚举替换异常信息
        return JSONResult.error(ErrorCode.SYSTEM_ERROR);
    }

    @ExceptionHandler(value = CustomException.class)
    public JSONResult error(CustomException e){
        e.printStackTrace();
             // 使用枚举替换异常信息
        return JSONResult.error(e.getMessage(),e.getCode());
    }

    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public JSONResult error(MethodArgumentNotValidException e){
        e.printStackTrace();

        // 获取异常对象中包含的所有验证消息
        StringBuffer sb = new StringBuffer();
        for (ObjectError error : e.getBindingResult().getAllErrors()) {
            sb.append(error.getDefaultMessage()).append(";");
        }
        // 使用枚举替换异常信息
        return JSONResult.error(sb.toString(),ErrorCode.PARAM_ERROR.getCode());
    }
}
